package com.liu.juc.function;

import org.junit.jupiter.api.Test;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * 四大函数式接口
 * 新时代的程序员：lambda表达式、链式编程、函数式接口、Stream流式计算
 * Function  函数型接口
 * Predicate 断定型接口
 * Consummer 消费型接口
 * Supplier供给型接口
 */
public class FunctionDemo {

    /**
     * 函数接口
     */
    @Test
    public void functionTest() {
        //一般方式
//        Function<String, String> function = new Function<String, String>() {
//            @Override
//            public String apply(String s) {
//                return s;
//            }
//        };
//        String str = function.apply("str");
        //lambda 表达式
        Function<String, String> function = (str1) -> {
            return str1;
        };
        System.out.println(function.apply("sere"));
    }


    /**
     * 断言接口
     */
    @Test
    public void predicateTest() {
//        Predicate<String> predicate = new Predicate<String>() {
//            @Override
//            public boolean test(String s) {
//                return false;
//            }
//        };
//        predicate.test("q31");

        Predicate<String> predicate = (str) -> {
            return false;
        };
        predicate.test("12312");
    }


    /**
     * 消费者接口
     */
    @Test
    public void consummerTest() {
//        Consumer<String> consumer = new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        };
        Consumer<String> consumer = (str) -> {
            System.out.println(str);
        };
        consumer.accept("1212");

    }



    /**
     * 供给接口
     */
    @Test
    public void supplierTest() {
//        Consumer<String> consumer = new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        };
        Supplier<String> supplier = () -> {
           return "123123";
        };
        supplier.get();

    }

}
